package com.itbaizhan;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/*chrome浏览器 与 IE浏览器 分别启动HttpSession*/
public class DestroyHttpSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求头数据
        String header = req.getHeader("User-Agent");
        //获得HttpSession对象
        HttpSession session = req.getSession();

        //用字符串判断
        if(header.indexOf("Chrome")!= -1){
            //存放数据
            session.setAttribute("key","Chrome");
        }else {
            //不同的浏览创建不同的HttpSession,
            // 所以Chrome与IE浏览器中的key不会被覆盖，只是内容相同
           session.setAttribute("key","IE");
           //销毁当前HttpSession的方法
           // session.invalidate();
        }
        String sessionID = session.getId();

        PrintWriter pw = resp.getWriter();
        pw.println("OK!"+" "+sessionID);
        pw.flush();
        pw.close();

    }
}
 /*HttpSession的销毁方式
HttpSession的销毁方式有两种：

通过web.xml文件指定超时时间
通过HttpSession对象中的invalidate()方法销毁当前HttpSession对象

我们可以在web.xml文件中指定HttpSession的超时时间，当到达指定的超时时间
后，容器就会销该HttpSession对象，单位为分钟。该时间对整个web项目中的
所有HttpSession对象有效。时间的计算方式是根据最后一次请求时间作为起始时间。
只要用户继续访问，服务器就会更新HttpSession的最后访问时间，
并维护该HttpSession。用户每访问服务器一次，无论是否读写HttpSession，
服务器都认为该用户的HttpSession"活跃（active）"了一次,
销毁时间则会重新计算。如果有哪个客户端浏览器对应的HttpSession的失效时间
已到，那么与该客户端浏览器对应的HttpSession对象就会被销毁。
其他客户端浏览器对应的HttpSession对象会继续保存不会被销毁。

1<session-config>
2    <session-timeout>1</session-timeout>
3</session-config>

我们也可以在Tomcat的web.xml文件中配置HttpSession的销毁时间。
如果在Tomcat的web.xml文件中配置了HttpSession的超时时间对应的是
Tomcat中所有的Web项目都有效。相当于配置了全局的HttpSession超时时间。
如果我们在Web项目中配置了超时时间，那么会以Web项目中的超时时间为准。
633<session-config>
634<session-timeout>1</session-timeout>
635</session-config>

invalidate()方法是HttpSession对象中所提供的用于销毁当前
HttpSession的方法。我们通过调用该方法可以销毁当前HttpSession对象。*/